/**
 * @file IProtocol.h
 * @brief 协议接口定义
 * @author Your Name
 * @date 2025-03-30
 */

#ifndef IPROTOCOL_H
#define IPROTOCOL_H

#include <QObject>
#include <QByteArray>
#include <QVariantMap>

/**
 * @brief 协议接口类
 * @details 定义所有协议必须实现的接口
 */
class IProtocol : public QObject {
    Q_OBJECT
public:
    explicit IProtocol(QObject *parent = nullptr);
    virtual ~IProtocol() = default;

    /**
     * @brief 将命令封装为协议数据包
     * @param cmdType 命令类型
     * @param data 命令数据
     * @return 封装好的数据包
     */
    virtual QByteArray encodePacket(uint8_t cmdType, const QByteArray& data) = 0;

    /**
     * @brief 解析收到的数据
     * @param recvData 接收到的原始数据
     */
    virtual void parseReceivedData(const QByteArray& recvData) = 0;

signals:
    /**
     * @brief 有效数据包解析完成信号
     * @param cmdType 命令类型
     * @param data 有效数据
     */
    void packetParsed(uint8_t cmdType, const QByteArray& data);

    /**
     * @brief 协议错误信号
     * @param errCode 错误码
     * @param errMsg 错误描述
     */
    void protocolError(int errCode, const QString& errMsg);
};

#endif // IPROTOCOL_H
